import {initMixin} from "./init";
import {initLifeCycle} from "./lifecycle.js";
import {initGlobalApi} from "./globalApi.js";
import {initStateMixin} from "./state.js";
import {compilerToFunction} from "./compile/index.js";
import {createEle, patch} from "./vdom/patch.js";

function Vue(options) {
    this._init(options)
}

initMixin(Vue)
initLifeCycle(Vue)
initGlobalApi(Vue)
initStateMixin(Vue)


//----------测试diff算法---------------
// let render1 = compilerToFunction(`<div style='color: red'>
// <li key="a">a</li>
// <li key="b">b</li>
// <li key="c">c</li>
// <li key="d">d</li>
// </div>`)
// let vm1 = new Vue({data:{name:"张三"}})
// let prevVNode = render1.call(vm1)
// let el = createEle(prevVNode)
// document.body.appendChild(el)
//
// let render2 = compilerToFunction(`<div style='background-color: blue;color: white'>
// <li key="f">f</li>
// <li key="e">e</li>
// <li key="c">c</li>
// <li key="n">n</li>
// <li key="a">a</li>
// <li key="m">m</li>
// <li key="j">j</li>
// </div>`)
// let vm2 = new Vue({data:{name:"李四"}})
// let newVNode = render2.call(vm2)
//
// setTimeout(()=>{
//     console.log(prevVNode)
//     console.log(newVNode)
//     patch(prevVNode,newVNode)
// },1000)

export default Vue